A frame buffer is a common feature in many conventional graphics processing systems. A frame buffer may comprise one or more memory buffers that are used to contain at least one complete frame of data for communication to a video display device. As illustrated in FIG. 1, an exemplary computer system 100 comprises a processor 102 operable to execute software applications 104 and a graphics processing unit 108 operable to receive graphics information from the software applications 104 and to process the video and graphics information and deliver it for display by a display device 112. As illustrated in FIG. 1, in one embodiment, a processor 102 is operable to execute software applications 104 that interact with graphics drivers 106 and deliver video and graphics information to the graphics processing unit 108 for processing. In one embodiment, an exemplary graphics processing unit 108 comprises a frame buffer 110 operable to store video and graphics data necessary for at least one complete frame of data to be displayed by the display device 112. The contents of the frame buffer 110 may also be read out by the graphics processing unit 108 and updated with current graphics/video data.
Graphics information stored in a frame buffer may be divided into tiles. Each tile comprises one or more display pixels. An exemplary tile may have a rectangular shape or a square shape. A tile may comprise a variety of different pixels quantities (e.g., 12 pixels/tile and 64 pixels/tile). FIG. 2A illustrates a portion of an exemplary frame buffer 110 divided into tiles 202. FIG. 2A illustrates a plurality of square tiles 202 defined by dashed lines representing the individual tiles 202. As also illustrated in FIG. 2A, a particular tile 204 may contain a plurality of objects 206a-206d that cover one or more pixels of the tile 204. Object #0 (206a) may be a background color.
An exemplary tile 202 may be covered by any number of objects 206. Note, an object is a generic term and may represent triangles, layers, z-planes, or a collection of samples with a common property (e.g., color) that overlie pixels, etc. Rather than pixels, an exemplary tile 202 may also be referred to as comprising samples. An exemplary pixel may comprise one or more samples. An exemplary pixel may also comprise a multisample that is an average of all the color samples of the pixel.
FIG. 2B illustrates additional details of the tile 204 illustrated in FIG. 2A. Tile 204 is divided into a plurality of pixels/samples 208. Hereinafter, the pixel/samples 208 will be referred to as samples 208. The exemplary tile 204 illustrated in FIG. 2B comprises 12 samples 208, however, as noted above, a tile may comprise any number of samples. FIG. 2B also illustrates which object 206a-206d is covering a particular sample 208. For example, in the top row of samples in FIG. 2B, the first three samples 208 (from left to right) are covered by object #0 (206a), while the fourth sample 208 is covered by object #1 (206b). Similarly, the middle row of four samples are covered by object #2 (206c), object #0 (206a), object #0 (206a), and object #1 (206b), respectively from left to right, while the third row of four samples are covered by object #0 (206a), object #3 (206d), object #0 (206a), and object #0 (206a), respectively from left to right. The drawings in FIGS. 2A and 2B are not drawn to scale and some details have been exaggerated for the sake of clarity. Furthermore, while FIG. 2B illustrates an exemplary four objects, any number of objects 206 may cover a tile.
As illustrated in FIGS. 2A and 2B, frame-buffer tiles 202/204 may be covered by multiple objects 206. Each of these objects 206 may have associated coverage information (e.g., coverage masks) to identify the samples 208 covered by each object 206. As illustrated in FIG. 2B and Table 1, tile coverage information may be defined using a coverage mask. As noted above, the exemplary tile 204 illustrated in FIG. 2B comprises 12 samples 208, and 4 objects 206a-206d. As illustrated in Table 1, and described in detail below, each object (Objects #0-3 (206a-206d)) will have its own coverage mask, specifying directly which samples 208 it covers.
TABLE 1ObjectCoverage Masks01110|0110|101110001|0001|000020000|1000|000030000|0000|0100
Such coverage information may be immediately available and requires no decoding. However, this method is not storage-efficient, as it requires N*K bits for the required storage masks (where N equals the quantity of samples/tile and K equals the quantity of objects/tile). For example, as illustrated in FIG. 2B and Table 1, the full set of coverage masks for tile 204 in FIG. 2B will require 48 bits to store in the frame buffer 110. As illustrated in FIG. 2B and Table 1, each coverage mask for a respective object 206 requires 12 bits, resulting in a total of 48 bits required to store the coverage masks for the tile. As illustrated in FIG. 2B and Table 1, in an exemplary coverage mask for an object, when a sample is covered by the object, the bit corresponding to that sample is a logical “1.” Correspondingly, a logical “0” indicates that the particular sample is not covered by the object. The exemplary coverage masks illustrated in Table 1 also comprise vertical lines (e.g., “|”) that are included for the sake of clarity and to delineate each of the three rows, but are not actually part of the coverage map. In other words, the coverage mask for object #0 is 11001101011.